/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fatecpg.zanotti.acessobanco;

import br.com.fatecpg.zanotti.modelo.Contas_receber;
import br.com.fatecpg.zanotti.modelo.Pedido;
import javax.swing.*;
import java.sql.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;

/**
 * Classe responsável por realizar todas consultas relacionadas a Tabela da janela de Vendas.
 * @author F.L. Zanotti
 */
public class conTableVenda {

    /**
     * Método responsável pela consulta total para a Tabela de Venda, retornando a JTable populada.
     * @param testeTabela JTable
     * @return JTable
     */
    public JTable ConsultaTabelaToda(JTable testeTabela) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT c.NMCLIENTE, p.CDVENDA FROM CLIENTE c JOIN PEDIDO p " +
                    "USING (CDCLIENTE)";

            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {
                String NMCLIENTE = rs.getString("NMCLIENTE");
                String CDVENDA = rs.getString("CDVENDA");


                NMCLIENTE = NMCLIENTE.trim();
                CDVENDA = CDVENDA.trim();


                Vector teste = new Vector();
                teste.addElement(NMCLIENTE);
                teste.addElement(CDVENDA);


                modelo.addRow(teste);


            }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            try {
                rs.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                pst.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                con.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
        }


        return null;
    }

    /**
     * Método responsável pela consulta do maior número de CDVenda, usos diversos..
     * @return String
     */
    public String ConsultaMAXCdVenda() {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT MAX(CDVENDA) CDVENDA FROM PEDIDO";

            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            String CDVENDA = "";
            while (rs.next()) {
                CDVENDA = rs.getString("CDVENDA");

                CDVENDA = CDVENDA.trim();
            }

            return CDVENDA;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            try {
                rs.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                pst.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                con.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
        }


        return null;
    }

    /**
     * Método responsável pela consulta da Tabela de Venda, filtrado por Cliente. Retorna uma JTable Populada.
     * @param testeTabela JTable
     * @param s String
     * @return JTable
     */
    public JTable ConsultaTabelaPorCliente(JTable testeTabela, String s) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            con = AbreConexao.getConexao();

            String query = "SELECT c.NMCLIENTE, p.CDVENDA FROM CLIENTE c JOIN PEDIDO p " +
                    "USING (CDCLIENTE)" +
                    " WHERE c.NMCLIENTE LIKE '" + s + "%'";



            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {
                String NMCLIENTE = rs.getString("NMCLIENTE");
                String CDVENDA = rs.getString("CDVENDA");


                NMCLIENTE = NMCLIENTE.trim();
                CDVENDA = CDVENDA.trim();


                Vector teste = new Vector();
                teste.addElement(NMCLIENTE);
                teste.addElement(CDVENDA);

                modelo.addRow(teste);


            }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
        }
        return null;
    }

    /**
     * Método responsável pela consulta da Tabela de Venda, filtrado por Codigo. Retorna uma JTable Populada.
     * @param testeTabela JTable
     * @param s String
     * @return JTable
     */
    public JTable ConsultaTabelaPorCodigo(JTable testeTabela, String s) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT c.NMCLIENTE, p.CDVENDA FROM CLIENTE c JOIN PEDIDO p " +
                    "USING (CDCLIENTE)" +
                    " WHERE p.CDVENDA LIKE '" + s + "%'";




            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {
                String NMCLIENTE = rs.getString("NMCLIENTE");
                String CDVENDA = rs.getString("CDVENDA");


                NMCLIENTE = NMCLIENTE.trim();
                CDVENDA = CDVENDA.trim();


                Vector teste = new Vector();
                teste.addElement(NMCLIENTE);
                teste.addElement(CDVENDA);

                modelo.addRow(teste);


            }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
        }
        return null;
    }

    /**
     * Método responsável por retornar um objeto COntas_receber a partir de uma consulta por codigo de venda.
     * @param s
     * @return Contas_receber
     */
    public Contas_receber ConsultaCONTAS_RECEBERPorLinha(String s) {
        try {
            Connection con = AbreConexao.getConexao();

            PreparedStatement pst = con.prepareStatement("SELECT CDNOTAFISCAL, CDVENDA, TO_CHAR(DTRECEBER, 'DD/MM/YY') DTRECEBER, " +
                    "DSCONTARECEBER, NMORIGEM, VLRECEBER from contas_receber" +
                    " WHERE cdvenda = " + s + "");

            ResultSet rs = pst.executeQuery();
            Contas_receber Contas_receber = new Contas_receber();
            while (rs.next()) {
                Contas_receber.setCDNOTAFISCAL(rs.getString("CDNOTAFISCAL"));
                Contas_receber.setCDVENDA(rs.getString("CDVENDA"));
                Contas_receber.setDTRECEBER(rs.getString("DTRECEBER"));
                Contas_receber.setDSCONTARECEBER(rs.getString("DSCONTARECEBER"));
                Contas_receber.setNMORIGEM(rs.getString("NMORIGEM"));
                Contas_receber.setVLRECEBER(rs.getString("VLRECEBER"));
            }

            return Contas_receber;

        } catch (SQLException e) {
            System.out.println(e);
        }

        return null;
    }

    /**
     * Método responsável por retornar um objeto Pedido a partir de uma consulta por codigo de venda.
     * @param s Código da venda
     * @return Pedido Objeto
     */
    public Pedido ConsultaPedidoPorLinha(String s) {
        try {
            Connection con = AbreConexao.getConexao();

            PreparedStatement pst = con.prepareStatement("SELECT CDNOTAFISCAL, " +
                    "CDVENDA, CLI_CDLOJA, CDCLIENTE, CDCARGO, FUN_CDLOJA, " +
                    "CDFUNCIONARIO, TO_CHAR(DTVENDA, 'DD/MM/YY') DTVENDA, " +
                    "TO_CHAR(DTPGTO, 'DD/MM/YY') DTPGTO, " +
                    "TO_CHAR(DTENTREGA, 'DD/MM/YY') DTENTREGA, ICENTREGUE, " +
                    "ALT_ENDERECO from Pedido" +
                    " WHERE cdvenda = " + s + "");

            ResultSet rs = pst.executeQuery();
            Pedido Pedido = new Pedido();
            while (rs.next()) {
                Pedido.setCDNOTAFISCAL(rs.getString("CDNOTAFISCAL"));
                Pedido.setCDVENDA(rs.getString("CDVENDA"));
                Pedido.setCLI_CDLOJA(rs.getString("CLI_CDLOJA"));
                Pedido.setCPFCLIENTE(rs.getString("CDCLIENTE"));
                Pedido.setCDCARGO(rs.getString("CDCARGO"));
                Pedido.setFUN_CDLOJA(rs.getString("FUN_CDLOJA"));
                Pedido.setCDFUNCIONARIO(rs.getString("CDFUNCIONARIO"));
                Pedido.setDTVENDA(rs.getString("DTVENDA"));
                Pedido.setDTPGTO(rs.getString("DTPGTO"));
                Pedido.setDTENTREGA(rs.getString("DTENTREGA"));
                Pedido.setICENTREGUE(rs.getString("ICENTREGUE"));
                Pedido.setALT_ENDERECO(rs.getString("ALT_ENDERECO"));

            }

            return Pedido;

        } catch (SQLException e) {
            System.out.println(e);
        }

        return null;
    }

    /**
     * Método responsável por retornar uma tabela preenchida a partir de uma consulta utilizando código de venda
     * @param s
     * @param testeTabela
     * @return JTable
     */
    public JTable ConsultaTabelaPedido_tem_Produto(JTable testeTabela, String s) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT e.PROD_CDLOJA, " +
                    "e.CDFORNECEDOR, e.CDPRODUTO, " +
                    "r.NMMODELO, r.VLVENDA FROM PEDIDO_TEM_PRODUTO e, " +
                    " PRODUTO r " +
                    "WHERE e.CDPRODUTO = r.CDPRODUTO " +
                    "AND e.CDVENDA =" + s + "";

            pst = con.prepareStatement(query);

            rs = pst.executeQuery();


            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {
                String PROD_CDLOJA = rs.getString("PROD_CDLOJA");
                String CDFORNECEDOR = rs.getString("CDFORNECEDOR");
                String CDPRODUTO = rs.getString("CDPRODUTO");
                String NMMODELO = rs.getString("NMMODELO");
                String VLVENDA = rs.getString("VLVENDA");

                PROD_CDLOJA = PROD_CDLOJA.trim();
                CDFORNECEDOR = CDFORNECEDOR.trim();
                CDPRODUTO = CDPRODUTO.trim();
                NMMODELO = NMMODELO.trim();
                VLVENDA = VLVENDA.trim();


                Vector teste = new Vector();
                teste.addElement(PROD_CDLOJA);
                teste.addElement(CDFORNECEDOR);
                teste.addElement(CDPRODUTO);
                teste.addElement(NMMODELO);
                teste.addElement(VLVENDA);

                modelo.addRow(teste);


            }

            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        }

        return null;
    }
}
